home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2109 / 2109.xpi / chrome / febe.jar / content / febeDrag.js < prev    next >
Text File  |  2009-10-13  |  4KB  |  95 lines

  1. // author: Chuck Baker
  2. // contact: febe@customsoftwareconsult.com
  3. // Version 6.3
  4.  
  5. // Drag and drop code
  6. // Taken from template at http://kb.mozillazine.org/Dev_:_Extensions_:_Example_Code_:_Adding_Drag_and_Drop_to_Statusbarpanel
  7.  
  8. var febeStatObserver = {
  9.  init: function () {
  10.    febeStatObserver.flavour = "febeFla";    //any text you want but should have something to do with the extension name
  11.    febeStatObserver.statusbarPanel = "febestatusbar";//id of the statusbarpanel to drag
  12.    febeStatObserver.statbar = "status-bar";//name of statusbar
  13.    febeStatObserver.prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.febe.statpos.");
  14.    if(febeStatObserver.prefs.prefHasUserValue("insertAfter")){
  15.      try{
  16.       document.getElementById(febeStatObserver.statbar).insertBefore(document.getElementById(febeStatObserver.statusbarPanel),document.getElementById(febeStatObserver.prefs.getCharPref("insertAfter")));
  17.      }catch(e){;}
  18.    }   
  19.  },
  20.  getSupportedFlavours: function () {
  21.    var flavours = new FlavourSet();
  22.    flavours.appendFlavour(febeStatObserver.flavour);//text/unicode
  23.    return flavours;
  24.  },
  25.  onDragStart: function (evt,transferData,action){
  26.    var elme = evt.target;
  27.    while(elme != document.getElementById(febeStatObserver.statusbarPanel)){
  28.      elme =elme.parentNode;
  29.    }
  30.    var txt=elme.getAttribute("id");
  31.    transferData.data=new TransferData();
  32.    transferData.data.addDataForFlavour(febeStatObserver.flavour,txt);
  33.    var status = document.getElementById(febeStatObserver.statusbarPanel);
  34.    var statusbar = document.getElementById(febeStatObserver.statbar);
  35.    var child = statusbar.firstChild;
  36.    var x = 0;
  37.    while (child) {
  38.      if (child != status) {
  39.        if (!child.id) {
  40.          var newId = "statusbarpanel-noID"+x;
  41.          while (document.getElementById(newId)) newId += "x"+x;
  42.          child.id = newId;
  43.          child.setAttribute("persist", new String("id" + (child.persist ? " "+child.persist : "")) );
  44.          x++;
  45.        }
  46.        if (child.childNodes.length == 0 && document.getAnonymousNodes(child).length == 0)
  47.          child.setAttribute("abnochildren", true);
  48.        child.addEventListener("dragenter", function(event) { nsDragAndDrop.dragEnter(event,febeStatObserver); }, false);
  49.        child.addEventListener("dragover", function(event) { nsDragAndDrop.dragOver(event,febeStatObserver); }, false);
  50.        child.addEventListener("dragdrop", function(event) { nsDragAndDrop.drop(event,febeStatObserver); }, false);
  51.      }
  52.      child = child.nextSibling;
  53.    }
  54.    window.addEventListener("dragexit", function(event) { nsDragAndDrop.dragExit(event,febeStatObserver); }, true);
  55.  },
  56.  onDragEnter: function (evt,flavour,session){
  57.    var elm = evt.target;
  58.    while(elm.nodeName != "statusbarpanel"){
  59.      elm = elm. parentNode;
  60.    }
  61.  },
  62.  onDragOver: function (evt,flavour,session){
  63.    var elm = evt.target;
  64.    while(elm.parentNode.nodeName != "statusbar"){
  65.      elm = elm.parentNode;
  66.    }
  67.  },
  68.  onDrop: function (evt,dropdata,session){
  69.    if (dropdata.data!=""){
  70.      prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.febe.statpos.");
  71.      var elm = evt.target;
  72.      while(elm.nodeName != "statusbarpanel"){
  73.        elm = elm.parentNode;
  74.      }
  75.      // 'delta' is the difference between the mouse position when 
  76.      // the drop event occurs and the middle of the target's boxObject
  77.      // delta > 0 if the mouse is on the right of the middle
  78.      var delta = evt.clientX - (elm.boxObject.x + elm.boxObject.width / 2);
  79.      var elem = document.getElementById(dropdata.data);
  80.      var parent = elem.parentNode;
  81.      elem.setAttribute("insertafter",""+elm.getAttribute("id"));
  82.      (delta > 0) && (elm = elm.nextSibling);
  83.      if (elm) {
  84.        parent.insertBefore(elem,elm);
  85.      }
  86.      else {
  87.        parent.appendChild(elem);
  88.      }
  89.      // store the actual position into preferences
  90.      prefs.setCharPref("insertAfter",elm.getAttribute("id")+"");
  91.    }
  92.  }
  93. };
  94. window.addEventListener('load', febeStatObserver.init, false);
  95.